topic "";
[i448;a25;kKO9;2 $$1,0#37138531426314131252341829483380:class]
[l288;2 $$2,2#27521748481378242620020725143825:desc]
[0 $$3,0#96390100711032703541132217272105:end]
[H6;0 $$4,0#05600065144404261032431302351956:begin]
[i448;a25;kKO9;2 $$5,0#37138531426314131252341829483370:item]
[l288;a4;*@5;1 $$6,6#70004532496200323422659154056402:requirement]
[l288;i1121;b17;O9;~~~.1408;2 $$7,0#10431211400427159095818037425705:param]
[i448;b42;O9;2 $$8,8#61672508125594000341940100500538:tparam]
[b42;2 $$9,9#13035079074754324216151401829390:normal]
[2 $$0,0#00000000000000000000000000000000:Default]
[{_} 
[ {{10000@(113.42.0) [s0;%% [*@7;4 Geometric functions]]}}&]
[s3; &]
[s5;:Upp`:`:Squared`(const Pointf`&`): [@(0.0.255) double] [* Squared]([@(0.0.255) const] 
Pointf[@(0.0.255) `&] [*@3 p])&]
[s2;%% Returns [%-*@3 p][%-* .x][%-*` 2][%-*  `+ ][%-*@3 p][%-* .y][%-*` 2].&]
[s3; &]
[s4; &]
[s5;:Upp`:`:Length`(const Pointf`&`): [@(0.0.255) double] [* Length]([@(0.0.255) const] 
Pointf[@(0.0.255) `&] [*@3 p])&]
[s2;%% Returns sqrt([%-*@3 p][%-* .x][%-*` 2][%-*  `+ ][%-*@3 p][%-* .y][%-*` 2]).&]
[s3; &]
[s4; &]
[s5;:Upp`:`:Direction`(const Pointf`&`): [@(0.0.255) double] [* Direction]([@(0.0.255) cons
t] Pointf[@(0.0.255) `&] [*@3 p])&]
[s2;%% Returns atan2(p.y, p.x) : the angle between line `[0,0`] `- 
[%-*@3 p] and x axis in radians.&]
[s3; &]
[s4; &]
[s5;:Upp`:`:Distance`(const Pointf`&`,const Pointf`&`): [@(0.0.255) double] 
[* Distance]([@(0.0.255) const] Pointf[@(0.0.255) `&] [*@3 p1], [@(0.0.255) const] 
Pointf[@(0.0.255) `&] [*@3 p2])&]
[s2; [%% Returns distance ][*@3 p1][%%  ][*@3 p2][%%  `- Length(][*@3 p1][%%  `- 
][*@3 p2]).&]
[s3; &]
[s4; &]
[s5;:Upp`:`:SquaredDistance`(const Pointf`&`,const Pointf`&`): [@(0.0.255) double] 
[* SquaredDistance]([@(0.0.255) const] Pointf[@(0.0.255) `&] [*@3 p1], 
[@(0.0.255) const] Pointf[@(0.0.255) `&] [*@3 p2])&]
[s2; [%% Returns squared distance ][*@3 p1][%%  ][*@3 p2][%%  : Squared(][*@3 p1][%%  
`- ][*@3 p2]).&]
[s3; &]
[s4; &]
[s5;:Upp`:`:Mid`(const Pointf`&`,const Pointf`&`): Pointf [* Mid]([@(0.0.255) const] 
Pointf[@(0.0.255) `&] [*@3 a], [@(0.0.255) const] Pointf[@(0.0.255) `&] 
[*@3 b])&]
[s2;%% Returns middle point between [%-*@3 a] and [%-*@3 b] : 0.5 `* (a 
`+ b).&]
[s3; &]
[s4; &]
[s5;:Upp`:`:Orthogonal`(const Pointf`&`): Pointf [* Orthogonal]([@(0.0.255) const] 
Pointf[@(0.0.255) `&] [*@3 p])&]
[s2; [%% Returns a point that is ortoghonal to ][*@3 p][%%  wrt to `[0,0`] 
: `[`-][*@3 p][* .y],[*  ][*@3 p][* .x]`].&]
[s3; &]
[s4; &]
[s5;:Upp`:`:Normalize`(const Pointf`&`): Pointf [* Normalize]([@(0.0.255) const] 
Pointf[@(0.0.255) `&] [*@3 p])&]
[s2;%% Returns [%-*@3 p] / Length([%-*@3 p]). If p is `[0,0`], returns 
`[0,0`].&]
[s3; &]
[s4; &]
[s5;:Upp`:`:Polar`(double`): Pointf [* Polar]([@(0.0.255) double] [*@3 a])&]
[s2;%% Returns a point with distance 1 from `[0,0`] and angle [%-*@3 a] 
between the point and x axis.&]
[s3; &]
[s4; &]
[s5;:Upp`:`:Polar`(const Pointf`&`,double`,double`): Pointf [* Polar]([@(0.0.255) const] 
Pointf[@(0.0.255) `&] [*@3 p], [@(0.0.255) double] [*@3 r], [@(0.0.255) double] 
[*@3 a])&]
[s2;%% Returns [%-*@3 p] `+ [%-*@3 r] `* Polar([%-*@3 a]).&]
[s3; &]
[s4; &]
[s5;:Upp`:`:Lerp`(Point`_`,Point`_`,double`): [@(0.0.255) template] 
<[@(0.0.255) typename] T> Point`_<T> [* Lerp](Point`_<T> [*@3 a], Point`_<T> 
[*@3 b], [@(0.0.255) double] [*@3 t])&]
[s5;:Upp`:`:Lerp`(Size`_`,Size`_`,double`): [@(0.0.255) template] <[@(0.0.255) typename] 
T> Size`_<T> [* Lerp](Size`_<T> [*@3 a], Size`_<T> [*@3 b], [@(0.0.255) double] 
[*@3 t])&]
[s5;:Upp`:`:Lerp`(Rect`_`,Rect`_`,double`): [@(0.0.255) template] <[@(0.0.255) typename] 
T> Rect`_<T> [* Lerp](Rect`_<T> [*@3 a], Rect`_<T> [*@3 b], [@(0.0.255) double] 
[*@3 t])&]
[s2; [%% Performs linear interpolation between 2 geometric objects], 
if the parameter [*@3 t] is inside `[0,1`] (the linear extrapolation 
otherwise).&]
[s3; &]
[s0;%% ]]